

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="utf-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1">

    <title>Theme - LiterateCS</title>

	<link rel="icon" type="image/x-icon" href="../images/favicon.ico">
    <link rel="stylesheet" href="../bootstrap/css/readable/bootstrap.min.css" />
<link rel="stylesheet" href="../font-awesome/css/font-awesome.min.css">
<link rel="stylesheet" href="../sidebar/sidebar.min.css" />
<link rel="stylesheet" href="../css/book.min.css" />
<link rel="stylesheet" href="../syntax-highlight/solarized-light.min.css" />
<link rel="stylesheet" href="../mermaid/mermaid.css" />

</head>

<body>
    
    <nav class="navbar navbar-inverse navbar-fixed-top">
        <div class="container">
            <div class="navbar-header">
                <button type="button" class="navbar-toggle collapsed" data-toggle="collapse" data-target="#navbar" aria-expanded="false" aria-controls="navbar">
                    <span class="sr-only">Toggle navigation</span>
                    <span class="icon-bar"></span>
                    <span class="icon-bar"></span>
                    <span class="icon-bar"></span>
                </button>
                <a class="navbar-brand" href="#sidebar-toggle" id="sidebar-toggle">
					<span>
						<img src="../images/favicon.ico" height="24" class="hidden-sm hidden-xs" />
						<i id="sidebar-toggle-icon" class="hidden-md hidden-lg hidden-xl fa fa-angle-double-right" aria-hidden="true"></i>
						LiterateCS
					</span>
				</a>
            </div>
            <div id="navbar" class="navbar-collapse collapse">
                <ul class="nav navbar-nav">
                    <li><a href="../index.html"><i class="fa fa-home" aria-hidden="true"></i> Home</a></li>
					<li><a href="https://github.com/johtela/LiterateCS"><i class="fa fa-github" aria-hidden="true"></i> GitHub Repository</a></li>
                    <li><a href="https://www.nuget.org/packages/LiterateCS/"><i class="fa fa-download" aria-hidden="true"></i> Download</a></li>
                    <li><a href="../License.html">License</a></li>
                </ul>
            </div>
        </div>
    </nav>

    <div class="container">
        <div class="row">
            <div id="sidebar" class="col-md-3 hidden-sm hidden-xs">
                
        <div class="panel panel-default">
            <div class="panel-heading">
                <h4>On This Page</h4>
            </div>
            <div id="header-menu" class="panel-body main-menu">
                <ul></ul>
            </div>
        </div>  
        <div class="panel panel-default">
            <div class="panel-heading">
                <h4>Table of Contents</h4>
            </div>
            <div class="panel-body main-menu">
                <ul>
	<li><a href="../index.html">Home</a></li>
	<ul>
	</ul>
	<li><a href="../Introduction.html">Introduction</a></li>
	<ul>
	</ul>
	<li><a href="../LiterateCS/Options.html">Command Line Options</a></li>
	<ul>
	</ul>
	<li><a href="../LiterateCS/Program.html">Main Program</a></li>
	<ul>
	</ul>
	<li><a href="../LiterateCS/SplitPath.html">SplitPath Structure</a></li>
	<ul>
	</ul>
	<li><a href="../LiterateCS/Weaver.html">Document Weaver</a></li>
	<ul>
	</ul>
	<li><a href="../LiterateCS/MdWeaver.html">Markdown Weaver</a></li>
	<ul>
	</ul>
	<li><a href="../LiterateCS/HtmlWeaver.html">HTML Weaver</a></li>
	<ul>
	</ul>
	<li><a href="../LiterateCS/TocManager.html">TOC Manager</a></li>
	<ul>
	</ul>
	<li><a href="../LiterateCS/BlockList.html">Source Blocks</a></li>
	<ul>
	</ul>
	<li><a href="../LiterateCS/Macro.html">Macros</a></li>
	<ul>
	</ul>
	<li><a href="../LiterateCS/BlockBuilder.html">Block Builder</a></li>
	<ul>
	</ul>
	<li><a href="../LiterateCS/HtmlBlockBuilder.html">HTML Block Builder</a></li>
	<ul>
	</ul>
	<li><a href="../LiterateCS/HtmlGenerator.html">HTML Generation</a></li>
	<ul>
	</ul>
	<li>Themes</li>
	<ul>
<ul>
	<li><a href="../LiterateCS.Theme/DirHelpers.html">Directory Utilities</a></li>
	<ul>
	</ul>
	<li><a href="../LiterateCS.Theme/Toc.html">Table of Contents Classes</a></li>
	<ul>
	</ul>
	<li><a href="../LiterateCS.Theme/PageParams.html">Page Parameters</a></li>
	<ul>
	</ul>
	<li><a href="../LiterateCS.Theme/Theme.html" class="selected">Theme Base Class</a></li>
	<ul>
	</ul>
	<li><a href="../LiterateCS.Theme/LiterateException.html">Reporting Errors</a></li>
	<ul>
	</ul>
</ul>
	</ul>
	<li><a href="../FrontMatter.html">Front Matter</a></li>
	<ul>
	</ul>
	<li><a href="../TableOfContents.html">Table of Contents File</a></li>
	<ul>
	</ul>
	<li><a href="../TipsAndTricks.html">Tips &amp; Tricks</a></li>
	<ul>
	</ul>
	<li><a href="../License.html">License</a></li>
	<ul>
	</ul>
	<li><a href="../README.html">README</a></li>
	<ul>
	</ul>
	<li><a href="../Installation.html">Installation</a></li>
	<ul>
	</ul>
</ul>
            </div>
        </div>

            </div>
			<div id="contentarea" class="col-md-9 col-sm-12 col-sm-push-0 col-xs-12 col-xs-push-0">
				<ul class="pager">
	<li class="previous"><a href="../LiterateCS.Theme/PageParams.html">Previous: Page Parameters</a></li>
	<li class="next"><a href="../LiterateCS.Theme/LiterateException.html">Next: Reporting Errors</a></li>
</ul>
				<div id="static-content" class="markdown">
					<h1 id="theme-base-class">Theme Base Class</h1>
<p>Theme assemblies have to include a class which inherits from the Theme class
and implements a few abstract methods. The Theme base class defines the
interface through which the HtmlGenerator class can use the theme.</p>
<pre class="csharp"><code class="csharp"><span class="keyword" id="LiterateCS.Theme">namespace</span> LiterateCS<span class="punctuation">.</span>Theme
<span class="punctuation">{</span>
	<span class="keyword">using</span> System<span class="punctuation">.</span>IO<span class="punctuation">;</span>

	<span class="keyword" id="LiterateCS.Theme.Theme">public</span> <span class="keyword">abstract</span> <span class="keyword">class</span> <span class="typename">Theme</span>
	<span class="punctuation">{</span>
</code></pre>
<p>The first property that needs to be implemented returns the list of page
templates available in the theme. A theme can have as many templates
as it likes, but it must define at least one: the default template. The
name of the default template should be &quot;default&quot;.</p>
<pre class="csharp"><code class="csharp">		<span class="keyword" id="LiterateCS.Theme.Theme.AvalailablePageTemplates">public</span> <span class="keyword">abstract</span> <span class="keyword" data-toggle="tooltip" title="string">string</span><span class="punctuation">[</span><span class="punctuation">]</span> AvalailablePageTemplates <span class="punctuation">{</span> <span class="keyword" data-toggle="tooltip" title="LiterateCS.Theme.Theme.AvalailablePageTemplates.get">get</span><span class="punctuation" data-toggle="tooltip" title="LiterateCS.Theme.Theme.AvalailablePageTemplates.get">;</span> <span class="punctuation">}</span>
</code></pre>
<p>The second property that themes must implement is the path to the asset
directory. LiterateCS copies all the assets automatically to the output
directory. If you want to customize this behavior, you can override the
CopyAssets method below.</p>
<pre class="csharp"><code class="csharp">		<span class="keyword" id="LiterateCS.Theme.Theme.AssetDir">public</span> <span class="keyword">abstract</span> <span class="keyword" data-toggle="tooltip" title="string">string</span> AssetDir <span class="punctuation">{</span> <span class="keyword" data-toggle="tooltip" title="LiterateCS.Theme.Theme.AssetDir.get">get</span><span class="punctuation" data-toggle="tooltip" title="LiterateCS.Theme.Theme.AssetDir.get">;</span> <span class="punctuation">}</span>
</code></pre>
<p>The third method to implement performs the rendering of the page using
the template specified. The	default template is used, if <code>pageTemplate</code>
is <code>null</code>. Page parameters are set by the HtmlGerenator and passed to
the render method.</p>
<pre class="csharp"><code class="csharp">		<span class="keyword" id="LiterateCS.Theme.Theme.RenderPage(string, LiterateCS.Theme.PageParams)" data-toggle="tooltip" title="LiterateCS.Theme.Theme.RenderPage(string, LiterateCS.Theme.PageParams)">public</span> <span class="keyword" data-toggle="tooltip" title="LiterateCS.Theme.Theme.RenderPage(string, LiterateCS.Theme.PageParams)">abstract</span> <span class="keyword" data-toggle="tooltip" title="string">string</span> <span data-toggle="tooltip" title="LiterateCS.Theme.Theme.RenderPage(string, LiterateCS.Theme.PageParams)">RenderPage</span> <span class="punctuation">(</span><span class="keyword" data-toggle="tooltip" title="string">string</span> pageTemplate<span class="punctuation">,</span> <span class="typename" data-toggle="tooltip" title="LiterateCS.Theme.PageParams"><a href="../LiterateCS.Theme/PageParams.html#LiterateCS.Theme.PageParams">PageParams</a></span> pageParams<span class="punctuation">)</span><span class="punctuation" data-toggle="tooltip" title="LiterateCS.Theme.Theme.RenderPage(string, LiterateCS.Theme.PageParams)">;</span>
</code></pre>
<p>Theme class provides a default implementation for copying the auxiliary
files needed by the HTML pages. The default implementation copies all the
files under the asseet directory.</p>
<pre class="csharp"><code class="csharp">		<span class="keyword" id="LiterateCS.Theme.Theme.CopyAssets(string, string)" data-toggle="tooltip" title="LiterateCS.Theme.Theme.CopyAssets(string, string)">public</span> <span class="keyword" data-toggle="tooltip" title="LiterateCS.Theme.Theme.CopyAssets(string, string)">virtual</span> <span class="keyword" data-toggle="tooltip" title="void">void</span> <span data-toggle="tooltip" title="LiterateCS.Theme.Theme.CopyAssets(string, string)">CopyAssets</span> <span class="punctuation">(</span><span class="keyword" data-toggle="tooltip" title="string">string</span> assetDir<span class="punctuation">,</span> <span class="keyword" data-toggle="tooltip" title="string">string</span> outputDir<span class="punctuation">)</span>
		<span class="punctuation">{</span>
			<span class="typename" data-toggle="tooltip" title="LiterateCS.Theme.DirHelpers"><a href="../LiterateCS.Theme/DirHelpers.html#LiterateCS.Theme.DirHelpers">DirHelpers</a></span><span class="punctuation" data-toggle="tooltip" title="LiterateCS.Theme.DirHelpers.CopySubDirectories(string, string, string, bool)">.</span><span data-toggle="tooltip" title="LiterateCS.Theme.DirHelpers.CopySubDirectories(string, string, string, bool)"><a href="../LiterateCS.Theme/DirHelpers.html#LiterateCS.Theme.DirHelpers.CopySubDirectories(string, string, string, bool)">CopySubDirectories</a></span> <span class="punctuation">(</span><span data-toggle="tooltip" title="string">assetDir</span><span class="punctuation">,</span> <span data-toggle="tooltip" title="string">outputDir</span><span class="punctuation">,</span> <span class="string" data-toggle="tooltip" title="string">&quot;*&quot;</span><span class="punctuation">,</span> <span class="keyword" data-toggle="tooltip" title="bool">true</span><span class="punctuation">)</span><span class="punctuation">;</span>
			<span class="keyword">foreach</span> <span class="punctuation">(</span><span class="keyword" data-toggle="tooltip" title="string">var</span> file <span class="keyword">in</span> <span class="typename" data-toggle="tooltip" title="LiterateCS.Theme.DirHelpers"><a href="../LiterateCS.Theme/DirHelpers.html#LiterateCS.Theme.DirHelpers">DirHelpers</a></span><span class="punctuation" data-toggle="tooltip" title="LiterateCS.Theme.DirHelpers.Dir(string, string, bool)">.</span><span data-toggle="tooltip" title="LiterateCS.Theme.DirHelpers.Dir(string, string, bool)"><a href="../LiterateCS.Theme/DirHelpers.html#LiterateCS.Theme.DirHelpers.Dir(string, string, bool)">Dir</a></span> <span class="punctuation">(</span><span data-toggle="tooltip" title="string">assetDir</span><span class="punctuation">,</span> <span class="string" data-toggle="tooltip" title="string">&quot;*&quot;</span><span class="punctuation">,</span> <span class="keyword" data-toggle="tooltip" title="bool">true</span><span class="punctuation">)</span><span class="punctuation">)</span>
				<span class="typename" data-toggle="tooltip" title="System.IO.File">File</span><span class="punctuation" data-toggle="tooltip" title="System.IO.File.Copy(string, string, bool)">.</span><span data-toggle="tooltip" title="System.IO.File.Copy(string, string, bool)">Copy</span> <span class="punctuation">(</span><span data-toggle="tooltip" title="string">file</span><span class="punctuation">,</span> <span data-toggle="tooltip" title="string">file</span><span class="punctuation" data-toggle="tooltip" title="string.Replace(string, string)">.</span><span data-toggle="tooltip" title="string.Replace(string, string)">Replace</span> <span class="punctuation">(</span><span data-toggle="tooltip" title="string">assetDir</span><span class="punctuation">,</span> <span data-toggle="tooltip" title="string">outputDir</span><span class="punctuation">)</span><span class="punctuation">,</span> <span class="keyword" data-toggle="tooltip" title="bool">true</span><span class="punctuation">)</span><span class="punctuation">;</span>
		<span class="punctuation">}</span>
	<span class="punctuation">}</span>
<span class="punctuation">}</span>
</code></pre>

				</div>
				<ul class="pager">
	<li class="previous"><a href="../LiterateCS.Theme/PageParams.html">Previous: Page Parameters</a></li>
	<li class="next"><a href="../LiterateCS.Theme/LiterateException.html">Next: Reporting Errors</a></li>
</ul>
			</div>
        </div>
    </div>
    
    <footer class="panel-footer text-center">
        <div align="center">Copyright © 2018 Tommi Johtela</div>
		<div align="right">
			<small>
				Documentation created with <a href="https://johtela.github.io/LiterateCS/">LiterateCS</a>.
			</small>
		</div>
    </footer>


    
    <script src="../bootstrap/js/jquery.min.js"></script>
    <script src="../bootstrap/js/bootstrap.min.js"></script>
    <script src="../sidebar/sidebar.js"></script>
    <script src="../syntax-highlight/syntax.js"></script>
    <script type="text/x-mathjax-config">
        MathJax.Hub.Config({
        extensions: ["jsMath2jax.js"]
        });
    </script>
    <script src='https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.0/MathJax.js?config=TeX-AMS_HTML'></script>
	<script src="../mermaid/mermaid.min.js"></script>
	<script>mermaid.initialize({startOnLoad:true});</script>

</body>
</html>